//
//  RZIMDefine.h
//  RZIM
//
//  Created by reyzhang on 2021/7/26.
//  宏，常量，枚举定义

#ifndef RZIMDefine_h
#define RZIMDefine_h


#pragma mark RZIMConnectErrorCode - 建立连接返回的错误码

/**
 SDK 建立连接 错误码
 */
typedef NS_ENUM(NSInteger, RZIMConnectErrorCode) {
    
    /**
     不识别的连接错误
     */
    RZ_CONN_UNKNOW = 11000,
    
    /*!
     Token 无效

     @discussion Token 无效一般有以下两种原因。
     一是 token 错误，身份验证未通过或未提供token
     二是 token 过期，您需要请求您的服务器重新获取 token 并再次用新的 token
     建立连接。
     */
    RZ_CONN_TOKEN_INCORRECT = 11001,
    

    /*!
     用户在其它设备上登录

      @discussion 重连过程中当前用户在其它设备上登录
     */
    RZ_CONN_OTHER_DEVICE_LOGIN = 11002,
    

    /*!
     SDK 没有初始化配置

     @discussion 在使用 SDK 任何功能之前，必须先 Init 配置。
     */
    RZ_CLIENT_NOT_INIT_Config = 11003,
    
    /*!
     连接超时。

    @discussion 当调用 connectWithToken:timeLimit:dbOpened:success:error:  接口，timeLimit 为有效值时，SDK 在 timeLimit 时间内还没连接成功返回此错误。
    */
    RZ_CONNECT_TIMEOUT = 11004,
};


#pragma mark RZIMDBErrorCode - 数据库打开状态
typedef NS_ENUM(NSInteger, RZIMDBErrorCode) {
    RZIMDBOpenSuccess = 0,
    RZIMDBOpenFailed = 12002,
};



#pragma mark RZConversationType - 会话类型
/*!
 会话类型
 */
typedef NS_ENUM(NSUInteger, RZConversationType) {
    /*!
     单聊
     */
    ConversationType_PRIVATE = 0,

    /*!
     群组
     */
    ConversationType_GROUP = 1,

    /*!
     聊天室
     */
    ConversationType_CHATROOM = 2,

};


#pragma mark RZMessageType - 消息类型
typedef NS_ENUM(NSInteger,RZMessageType) {
    //system
    MessageType_SYS_NOTICE = 1, //系统通知
    MessageType_SYS_HEARTBEAT = 2, //心跳
    MessageType_SYS_TIME = 3, //时间
    MessageType_SYS_GROUPNEW = 4, //新建群组
    MessageType_SYS_DISSGROUP = 5, //解散群组
    MessageType_SYS_INVITEGROUP = 6, //邀请进群
    MessageType_SYS_KICKGROUP = 7, //请离群组
    MessageType_SYS_LEAVEGROUP = 8, //离开群组
    MessageType_SYS_SPEAKFORBID = 9, //禁言
    MessageType_SYS_SPEAKRELIEVE = 10, //解除禁言
    MessageType_SYS_RECALL = 11, //消息被撤回
    MessageType_SYS_EDITGROUPNAME = 20, //修改群名称
    MessageType_SYS_OTHERLOGIN = 21, //账号在其他地方登录
    MessageType_SYS_SERVERDISCONNECT = 22, //服务器断开连接
    
    //chat
    MessageType_TEXT = 101, //文本
    MessageType_AUDIO = 102, //音频
    MessageType_VIDEO = 103, //视频
    MessageType_PICTURE = 104, //图片
    MessageType_FILE = 105, //文件
};

#pragma mark RZErrorCode - 具体业务错误码
/*!
 具体业务错误码
 */
typedef NS_ENUM(NSInteger, RZErrorCode) {
    /*!
     成功
     */
    RZ_SUCCESS = 0,
    
    /*!
     未知错误（预留）
     */
    ERRORCODE_UNKNOWN = -1,

    /**
     发送消息失败
     */
    SEND_MSG_ERROR = 1,
    
    /**
     加入单聊失败
     */
    JOIN_PRIVATE_CHAT_ERROR = 2,
    
    /**
     创建群组失败
     */
    CREATE_GROUP_ERROR = 3,
    
    /**
     读取会话列表异常
     */
    GET_CONVERSATION_ERROR = 4,
    
    /**
     删除会话失败
     */
    REMOVE_CONVERSATION_ERROR = 5,
    
    /**
     读取会话详情异常
     */
    GET_CONVERSATION_DETAIL_ERROR = 6,
    
    /**
     读取消息列表异常
     */
    GET_MESSAGE_ERROR = 7,
    
};


#pragma mark RZConnectionStatus -  网络连接状态码
/*!
 网络连接状态码
 */
typedef NS_ENUM(NSInteger, RZConnectionStatus) {
    /*!
     未知状态

     @discussion 建立连接中出现异常的临时状态，SDK 会做好自动重连，开发者无须处理。
     */
    ConnectionStatus_UNKNOWN = -1,

    /*!
     连接成功
     */
    ConnectionStatus_Connected = 0,

    /*!
     连接过程中，当前设备网络不可用

     @discussion 当网络恢复可用时，SDK 会做好自动重连，开发者无须处理。
     */
    ConnectionStatus_NETWORK_UNAVAILABLE = 1,

    /*!
     当前用户在其他设备上登录，此设备被踢下线
     */
    ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT = 6,

    /*!
     连接中
     */
    ConnectionStatus_Connecting = 10,

    /*!
     连接失败或未连接
     */
    ConnectionStatus_Unconnected = 11,

    /*!
     Token无效

     @discussion
     Token 无效一般有两种原因。一是 token 错误，请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey
     是否一致；二是 token 过期，是因为您在开发者后台设置了 token 过期时间，您需要请求您的服务器重新获取 token
     并再次用新的 token 建立连接。
     */
    ConnectionStatus_TOKEN_INCORRECT = 31004,

    /*!
     与服务器的连接已断开,用户被封禁
     */
    ConnectionStatus_DISCONN_EXCEPTION = 31011
};


#pragma mark RZSDKRunningMode - SDK当前所处的状态
/*!
 SDK 当前所处的状态
 */
typedef NS_ENUM(NSUInteger, RZSDKRunningMode) {
    /*!
     后台运行状态
     */
    RZSDKRunningMode_Background = 0,

    /*!
     前台运行状态
     */
    RZSDKRunningMode_Foreground = 1
};



#define kAuthTokenKey @"RZIM_Auth_Token_Key"
#define kResponseDataKey @"data"
#define kResponseMsgKey @"msg"

#define RZ_IOS_SYSTEM_VERSION_GREATER_THAN(v)                                                                          \
    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define RZ_IOS_SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)                                                              \
    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define RZ_IOS_SYSTEM_VERSION_LESS_THAN(v)                                                                             \
    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)



#endif /* RZIMDefine_h */
